package com.baidu.mpks.usergroup.service;

import com.baidu.mpks.user.vo.UserParam;
import com.baidu.mpks.usergroup.domain.UserGroup;
import com.baidu.mpks.usergroup.dto.Resources;
import com.baidu.mpks.usergroup.dto.UserGroupDto;

import java.util.List;
import java.util.Map;
import java.util.Set;

public interface UserGroupService {

    UserGroupDto addGroup(UserGroupDto userGroupDto);

    UserGroup getUserGroupByNameAndType(String name, String type);

    List<UserGroupDto> getGroupList(Integer parentId);

    List<UserGroupDto> getGroupList(String type);

    UserGroupDto getRootGroup(String type);

    void deleteGroup(Integer groupId);

    UserGroupDto updateGroup(UserGroupDto userGroupDto);

    UserGroupDto getGroupInfo(Integer groupId);

    Set<UserGroup> searchGroup(String name, String type);

    UserGroupDto addResources(Integer groupId, String type, List<Resources> resources);

    void removeResourcesById(Integer groupId, String type, List<Integer> resourceIds);

    void removeResourcesByName(Integer groupId, String type, List<String> resourceNames);

    List<Resources> updateResourcesByGroup(Integer groupId, String type, List<Resources> resources);

    List<Resources> getResourcesByGroup(Integer groupId, String type);

    UserGroupDto addRoles(Integer groupId, List<Resources> roles);

    UserGroupDto updateRoles(Integer groupId, List<Resources> roles);

    List<UserGroup> getUserGroupsByUserId(String userId);

    List<UserGroup> getUserGroupsByUserId(String userId, String type);

    Set<UserGroup> getUserGroupsByUserIds(List<String> userIds, String type);

    void removeRoles(Integer groupId, List<Integer> roleIds);

    void recurGroup(Integer groupId, Set<UserGroup> set);

    List<Resources> getRolesByGroup(Integer groupId);

    List<Resources> getInheritRolesByGroup(Integer groupId, boolean includeCur);

    List<UserGroup> getGroupByRoleId(Integer roleId);

    List<UserParam> addUsers(Integer groupId, List<UserParam> users);

    void removeUsers(Integer groupId, List<String> userIds);

    void removeUserByUserId(String userId);

    void removeUsersByType(String type, List<String> userIds);

    Map<String, Object> getUsersByGroup(Integer groupId, Integer pageNum, Integer pageSize);

    UserGroup checkAndGetUserGroup(Integer groupId);
}
